package 设计二构造版本2;

import java.util.Random;

/**
 * 减法算式子类，继承自fermula抽象类
 */
public class SubtractFormula extends fermula {
    
    /**
     * 无参构造函数
     */
    public SubtractFormula() {
        this.operator = '-';
    }
    
    /**
     * 生成随机减法算式
     * 确保被减数大于等于减数
     * @param random 随机数生成器
     */
    @Override
    public void generate(Random random) {
        // 确保被减数大于等于减数
        leftOperand = random.nextInt(99) + 1; // 1-99
        rightOperand = random.nextInt(leftOperand) + 1; // 1-leftOperand
        calculate();
    }
    
    /**
     * 计算减法结果
     */
    @Override
    protected void calculate() {
        this.result = leftOperand - rightOperand;
    }
    
    /**
     * 判断两个减法算式是否相等
     * 减法不满足交换律，所以严格比较
     * @param obj 要比较的对象
     * @return 如果相等返回true，否则返回false
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        SubtractFormula other = (SubtractFormula) obj;
        // 减法不满足交换律，严格比较
        return leftOperand == other.leftOperand &&
               rightOperand == other.rightOperand;
    }
    
    /**
     * 计算减法算式的哈希码
     * @return 哈希码
     */
    @Override
    public int hashCode() {
        // 减法不满足交换律，直接使用父类的哈希码计算方式
        return super.hashCode();
    }
}